package com.xinxing.city.recoverycheck.serialport;

import android.util.Log;


import com.xinxing.city.recoverycheck.DI;
import com.xinxing.city.recoverycheck.entitys.KernelAction;
import com.xinxing.city.recoverycheck.entitys.KernelActions;
import com.xinxing.city.recoverycheck.interfaces.IRfidManager;
import com.xinxing.city.recoverycheck.util.StringUtil;

import org.greenrobot.eventbus.EventBus;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class RfidManager implements IRfidManager {
    private SerialPortHelper2 serialPortHelper;
    private List<String> rfids = new ArrayList<>();
    private int count =0;
    @Override
    public void start(String sPort, int iBaudRate) {

        //根据品类idCodePrefix 来判断是否rfid匹配
        try {
            serialPortHelper = new SerialPortHelper2(sPort, iBaudRate) {
                @Override
                protected void onDataReceived(byte[] buffer, int size) {
                    String res2 = StringUtil.byte2HexStr(buffer);
                    Log.e("rfid 读：", res2);
                    if (res2.contains("7e")) {
                        String[] res = res2.split("7e");
                        count += res.length;
                        Log.e("TTT", "count" + count);
                        if (res.length > 0) {
                            for (String s : res) {
                                if (s.length() >= 30 && s.substring(0, 2).equals("bb")) {
                                    String strs = s.substring(16, 16 + 12);
                                    if (!rfids.contains(strs)) {
                                        rfids.add(strs);
                                    }
                                }
                            }
                            if (rfids.size() > 0) {
                                EventBus.getDefault().post(new KernelAction(KernelActions.RFID_READ, null));
                            } else if (count == 5) {
                                EventBus.getDefault().post(new KernelAction(KernelActions.RFID_READ_F, null));
                                Log.e("TTT", "读卡失败");
                            }

                        }
                    }
                }
            };
            serialPortHelper.open();
        } catch (IOException e) {
            Log.e("Err", e.toString());
        }
    }

    @Override
    public void stop() {
        serialPortHelper.close();
    }

    @Override
    public void singleRfid() {
        ArrayList<Byte> mbuffer = new ArrayList<>();
        mbuffer.add((byte) 0xBB);
        mbuffer.add((byte) 0x00);
        mbuffer.add((byte) 0x22);
        mbuffer.add((byte) 0x00);
        mbuffer.add((byte) 0x00);
        mbuffer.add((byte) 0x22);
        mbuffer.add((byte) 0x7E);
        sendtoPortBuffer(mbuffer);
    }

    @Override
    public void loopRfid() {

        count = 0;
        rfids.clear();
        ArrayList<Byte> mbuffer = new ArrayList<>();
        mbuffer.add((byte) 0xBB);
        mbuffer.add((byte) 0x00);
        mbuffer.add((byte) 0x27);
        mbuffer.add((byte) 0x00);
        mbuffer.add((byte) 0x03);
        mbuffer.add((byte) 0x22);
        mbuffer.add((byte) 0x00);
        mbuffer.add((byte) 0x05);
        mbuffer.add((byte) 0x51);
        mbuffer.add((byte) 0x7E);
        sendtoPortBuffer(mbuffer);
    }

    @Override
    public void stopLoop() {
//        ArrayList<Byte> mbuffer = new ArrayList<>();
//        mbuffer.add((byte) 0xBB);
//        mbuffer.add((byte) 0x00);
//        mbuffer.add((byte) 0x28);
//        mbuffer.add((byte) 0x00);
//        mbuffer.add((byte) 0x00);
//        mbuffer.add((byte) 0x28);
//        mbuffer.add((byte) 0x7E);
//        sendtoPortBuffer(mbuffer);
    }

    @Override
    public List<String> getRfid() {
        return rfids;
    }

    public void sendtoPortBuffer(List<Byte> mBuffer) {
        byte[] bytes = new byte[mBuffer.size()];
        for (int i = 0; i < mBuffer.size(); i++) {
            bytes[i] = mBuffer.get(i);
        }
        String res = StringUtil.byte2HexStr(bytes);
        Log.e("rfid", "发送 : " + res);
        if (serialPortHelper != null)
            serialPortHelper.send(bytes);

    }
}
